package samsung.sds.systemParamManagement.service.impl;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import samsung.sds.system.common.baseQuery.AbstractBaseService;
import samsung.sds.system.common.baseQuery.BaseMapper;
import samsung.sds.system.utils.Constants;
import samsung.sds.systemParamManagement.dao.SystemParamManagementMapper;
import samsung.sds.systemParamManagement.model.SystemParamEntity;
import samsung.sds.systemParamManagement.service.SystemParamManagementService;

/**
 * @author c1.wang
 * @createDate 2016-02-22
 * 
 * 系统参数信息实现类
 */
@Service("systemParamManagementServiceImpl")
public class SystemParamManagementServiceImpl extends
		AbstractBaseService<SystemParamEntity> implements
		SystemParamManagementService {

	/** 全局系统参数缓存字段 **/
	private static Map<String, SystemParamEntity> systemParamMap;
	
	@Autowired
	private SystemParamManagementMapper systemParamManagementMapper;

	@Override
	protected BaseMapper<SystemParamEntity> getMapper() {
		return systemParamManagementMapper;
	}
	
	/**
	 * 获取缓存列表数据
	 */
	public SystemParamEntity getSystemParamEntityFromCache(String paramKey){	
		if(systemParamMap == null){
			initCache();
		}
		return systemParamMap.get(paramKey);
	}
	
	private void initCache(){
		//init paramMap here
		systemParamMap = new HashMap<String,SystemParamEntity>();
		List<SystemParamEntity> rlt = this.systemParamManagementMapper.selectSYS_PARAM();
		for(SystemParamEntity entity :rlt){
			systemParamMap.put(entity.getParamKey(),entity);
		}
	}
	

	/**
	 * 检查选项编号是否重复
	 * 
	 * @param paramKey
	 * @return 是否重复
	 */
	public boolean checkParamKeyRepeat(String paramKey) {
		String[] paramKeyStution = paramKey.split(",");
		String paramKeyNow = paramKeyStution[0];
		String paramDotype = paramKeyStution[1];

	   return (checkParamIsNull(findEntityById(paramKeyNow)) && "create".equals(paramDotype)) ? false:true;
	}

	/**
	 * 新增或修改系统参数
	 * 
	 * @param request
	 * @param systemParam
	 * @return
	 */
	public String addOrUpdateSystemParam(String opType,
			SystemParamEntity systemParam) {
		String rlt = Constants.ERRMSG_PARAM_ERROR;
		// 检查参数
		if (isValidType(opType) && !checkParamIsNull(systemParam)) {
			return Constants.ERRMSG_PARAM_ERROR;
		}
		
		if (opType.equalsIgnoreCase("create")) {
			// 执行新增
			rlt =  insertEntity(systemParam)>0 ? Constants.SUCCESS_CODE:Constants.FAILURE_CODE;
		} else{
			// 执行修改
			rlt =  updateEntity(systemParam)>0 ?Constants.SUCCESS_CODE:Constants.FAILURE_CODE;
		}
		//update cache
		if(rlt.equals(Constants.SUCCESS_CODE)){
			systemParamMap.put(systemParam.getParamKey(),systemParam);
		}
		return rlt;
	}

	/**
	 * 判断参数有效性
	 * @param opType
	 * @return
	 */
	private boolean isValidType(String opType) {
		return !checkParamIsNull(opType)&&(opType.equalsIgnoreCase("create")||opType.equalsIgnoreCase("update"));
	}

	/**
	 * 检测参数是否为空
	 * 
	 * @param param
	 * @return
	 */
	private boolean checkParamIsNull(Object param) {
		return param == null ? false:true;
	}

	/**
	 * 删除系统参数
	 * 
	 * @param paramKey
	 * @return
	 */
	public String deleteSystemParam(String paramKey) {
		String rlt;
		
		// 若系统参数为空返回错误信息
		if (!checkParamIsNull(paramKey) || "".equals(paramKey)) {
			return Constants.ERRMSG_PARAM_ERROR;
		}
		
		rlt = deleteEntity(findEntityById(paramKey))>0 ? Constants.SUCCESS_CODE:Constants.FAILURE_CODE;
		//update cache
		if(rlt.equals(Constants.SUCCESS_CODE)){
			systemParamMap.remove(paramKey);
		}
		return rlt;
	} 
	
	public Map<String,SystemParamEntity> getSystemParamCache(){
		if(systemParamMap == null){
			initCache();
		}
		return systemParamMap;
	}
}
